package com.mbengue.corp.artisan.dao;

import java.util.List;

import org.springframework.dao.DataAccessException;

import com.mbengue.corp.artisan.modele.Article;

public interface ArticleDao {
  /**
   * Ajoute un nouvel article dans la BD
   * @param article {@link Article} à ajouter
   * @throws DataAccessException
   */
  public void ajouterArticle(Article article) throws DataAccessException;

  /**
   * Met à jour l'article donné en entrée.
   * @param article {@link Article} à mettre à jour.
   * @throws DataAccessException
   */
  public void modifierArticle(Article article) throws DataAccessException;

  /**
   * Supprime l'article donné en entrée.
   * @param article {@link Article} à supprimer.
   * @throws DataAccessException
   */
  public void supprimerArticle(Article article) throws DataAccessException;

  /**
   * Trouve tous les articles de la BD.
   * @return {@link List} <code> <</code>{@link Article} <code>> </code>
   * @throws DataAccessException
   */
  public List<Article> tousLesArticles() throws DataAccessException;

  /**
   * Trouve un article via son code
   * @param code {@link String} : code de l'article à trouver.
   * @return {@link Article}
   * @throws DataAccessException
   */
  public Article trouverArticleParCode(String code) throws DataAccessException;

  /**
   * Trouve tous les articles dont le code (ou partie)<br/>
   * est égale au code donné en entrée.
   * @param code {@link String} : code de l'article à trouver.
   * @return {@link Article}
   * @throws DataAccessException
   */
  public List<Article> trouverArticlesParCode(String code) throws DataAccessException;

  /**
   * Renvoie tous les codes articles de la BD.
   * @return {@link List} <code> <</code>{@link String} <code>> </code>
   * @throws DataAccessException
   */
  public List<String> tousLesCodesArticle() throws DataAccessException;

  /**
   * Retourne la désignation de l'article dont le code est donné en entrée.
   * @param code {@link String} identifiant d'un {@link Article}.
   * @return {@link String} désignation de l'article correspondante.
   * @throws DataAccessException
   */
  public String getDesignationArticle(String code) throws DataAccessException;

  /**
   * Retourne tous les article dont le code est le tableau<br/>
   * donné en entrée.
   * @param codes {@link String}<code>[]</code>: tableau de codes articles.
   * @return @return {@link List} <code> <</code>{@link Article}<code>> </code>
   * @throws DataAccessException
   */
  public List<Article> tousLesArticles(String[] codes) throws DataAccessException;
}
